package org.jaaksi.kottlindemo.coroutines

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

class Test {
  fun test2_2() = runBlocking { // 开始执行主协程
    GlobalScope.launch { // 在后台启动一个新的协程并继续
      delay(1000L)
      println("World!")
    }
    println("Hello,") // 主协程在这里会立即执行
    delay(2000L)      // 延迟 2 秒来保证 JVM 存活
  }

  fun test2() {
    GlobalScope.launch { // 在后台启动一个新的协程并继续
      delay(1000L)
      println("World!")
    }
    println("Hello,") // 主线程中的代码会立即执行
    runBlocking {     // 调用了 runBlocking 的主线程会一直 阻塞 直到 runBlocking 内部的协程执行完毕。
      delay(2000L)  // ……我们延迟 2 秒来保证 JVM 的存活
    }
  }

  fun test1() {
    GlobalScope.launch { // 在后台启动一个新的协程并继续
      delay(1000L) // 非阻塞的等待 1 秒钟（默认时间单位是毫秒）
      println("World!") // 在延迟后打印输出
    }
      println("Hello,") // 协程已在等待时主线程还在继续
      Thread.sleep(2000L) // 阻塞主线程 2 秒钟来保证 JVM 存活
  }

    fun test3() {
        val viewModelJob = Job()    //用来取消协程
        CoroutineScope(Dispatchers.Main + viewModelJob)
    }

    fun test4() {

    }

}